Skip to content

SK-3075: add Detect V2 to flowvault and skyvault SDKs - #286

Open
saileshwar-skyflow wants to merge 12 commits into
flowvault-release/26.10.0from
saileshwar/SK-3075-add-detect-v2-skyvault-flowvault
Open

saileshwar-skyflow wants to merge 12 commits into
flowvault-release/26.10.0from
saileshwar/SK-3075-add-detect-v2-skyvault-flowvault

Conversation

@saileshwar-skyflow

Copy link
Copy Markdown
Collaborator

Summary

Adds Detect V2 (deidentify_string, deidentify_file, get_run, reidentify_string, reidentify_file, check_guardrails) to the Python SDKs. The implementation lives in the shared common package and is re-exported from both flowvault and skyvault, with behaviour ported from the Java flowvault SDK (flowvault-release/26.10.1).

Jira: SK-3075

What's included

common (common/vault/detect, common/utils/enums/detect.py)

  • Detect models, controller, request/response mappers, run polling, file-output writer, validations, and V2 enums; V2 messages in SkyflowMessages.
  • Ported from Java: exponential poll backoff (1→2→4→8→16→32, capped), submit-only status=None, minimal client-side validation (server enforces the rest), auto-write of processed files for local-file inputs.

flowvault

  • make_skyflow_class(detect_cls=DetectController) activates client.detect().
  • VaultClient builds the common detect REST client and exposes get_strings_v2_api / get_files_v2_api / get_guardrails_v2_api.
  • Re-exports skyflow.vault.detect and the V2 enums; adds samples/detect_api/, a README section, and unit tests.

skyvault

  • Replaces the removed V1 detect API with V2 (same method/class names, per the migration doc).
  • Migrates the hand-written layer to the regenerated client names (drop V1 prefix, Skyflow→SkyflowAuth) and updates tests.
  • Includes the regenerated skyvault REST client that the above depends on.

Testing

  • common 102 ✓, flowvault 344 ✓, skyvault 520 ✓; ruff clean.
  • Live smoke-tested all six methods against a DEV vault from both flowvault and skyvault.

🤖 Generated with Claude Code

saileshwar-skyflow and others added 2 commits October 26, 2026 17:40
Implement Detect V2 (deidentify_string, deidentify_file, get_run,
reidentify_string, reidentify_file, check_guardrails) in the shared
`common` package and re-export it from both flowvault and skyvault.

common:
- detect models, controller, request/response mappers, run polling,
  file-output writer, and validations under common/vault/detect
- V2 detect enums under common/utils/enums/detect.py; V2 detect
  messages in common SkyflowMessages
- behaviour ported from the Java flowvault SDK @ flowvault-release/26.10.1
  (exponential poll backoff 1..32, submit-only status None, minimal
  client-side validation, auto-write of processed files)

flowvault:
- wire DetectController via make_skyflow_class(detect_cls=...)
- build the common detect REST client on VaultClient and expose
  get_strings_v2_api / get_files_v2_api / get_guardrails_v2_api
- re-export skyflow.vault.detect and the V2 enums
- detect_api samples, README section, and unit tests

skyvault:
- replace the removed V1 detect API with V2 (same method/class names)
- migrate the hand-written layer to the regenerated client (drop V1
  prefix, Skyflow -> SkyflowAuth) and update tests

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…lines

- common/skyvault generated rest version.py: guard metadata.version() with
  try/except PackageNotFoundError (matches flowvault), so importing the
  package never fails when the distribution metadata is absent.
- Refresh flowvault/skyvault public-API contract baselines for the Detect V2
  surface (flowvault adds the V2 enums; skyvault replaces V1 detect with V2).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 26, 2026 •

Copy link
Copy Markdown

Public API contract change (skyvault)

This PR changes skyvault/api-report/skyflow.api.json (the approved public API contract for skyflow). Review the surface change below:

diff --git a/skyvault/api-report/skyflow.api.json b/skyvault/api-report/skyflow.api.json
index 0f28168..69bb3be 100644
--- a/skyvault/api-report/skyflow.api.json
+++ b/skyvault/api-report/skyflow.api.json
@@ -32,6 +32,16 @@
   "skyflow.utils.enums.ContentType.PLAINTEXT": "attr = 'text/plain'",
   "skyflow.utils.enums.ContentType.URLENCODED": "attr = 'application/x-www-form-urlencoded'",
   "skyflow.utils.enums.ContentType.XML": "attr = 'text/xml'",
+  "skyflow.utils.enums.DeidentificationType": "class (Enum)",
+  "skyflow.utils.enums.DeidentificationType.ENTITY_ONLY": "attr = 'ENTITY_ONLY'",
+  "skyflow.utils.enums.DeidentificationType.ENTITY_UNIQUE_COUNTER": "attr = 'ENTITY_UNIQUE_COUNTER'",
+  "skyflow.utils.enums.DeidentificationType.MASK": "attr = 'MASK'",
+  "skyflow.utils.enums.DeidentificationType.UNKNOWN": "attr = 'UNKNOWN'",
+  "skyflow.utils.enums.DeidentificationType.VAULT_TOKEN": "attr = 'VAULT_TOKEN'",
+  "skyflow.utils.enums.DeidentifySourceType": "class (Enum)",
+  "skyflow.utils.enums.DeidentifySourceType.BASE64": "attr = 'BASE64'",
+  "skyflow.utils.enums.DeidentifySourceType.PRESIGNED_URL": "attr = 'PRESIGNED_URL'",
+  "skyflow.utils.enums.DeidentifySourceType.SKYFLOW_ID": "attr = 'SKYFLOW_ID'",
   "skyflow.utils.enums.DetectEntities": "class (Enum)",
   "skyflow.utils.enums.DetectEntities.ACCOUNT_NUMBER": "attr = 'account_number'",
   "skyflow.utils.enums.DetectEntities.AGE": "attr = 'age'",
@@ -109,6 +119,84 @@
   "skyflow.utils.enums.DetectOutputTranscriptions.MEDICAL_TRANSCRIPTION": "attr = 'medical_transcription'",
   "skyflow.utils.enums.DetectOutputTranscriptions.PLAINTEXT_TRANSCRIPTION": "attr = 'plaintext_transcription'",
   "skyflow.utils.enums.DetectOutputTranscriptions.TRANSCRIPTION": "attr = 'transcription'",
+  "skyflow.utils.enums.DetectRunStatus": "class (Enum)",
+  "skyflow.utils.enums.DetectRunStatus.FAILED": "attr = 'FAILED'",
+  "skyflow.utils.enums.DetectRunStatus.IN_PROGRESS": "attr = 'IN_PROGRESS'",
+  "skyflow.utils.enums.DetectRunStatus.QUEUED": "attr = 'QUEUED'",
+  "skyflow.utils.enums.DetectRunStatus.SUCCESS": "attr = 'SUCCESS'",
+  "skyflow.utils.enums.DetectRunStatus.UNKNOWN": "attr = 'UNKNOWN'",
+  "skyflow.utils.enums.EntityType": "class (Enum)",
+  "skyflow.utils.enums.EntityType.ACCOUNT_NUMBER": "attr = 'ACCOUNT_NUMBER'",
+  "skyflow.utils.enums.EntityType.AGE": "attr = 'AGE'",
+  "skyflow.utils.enums.EntityType.ALL": "attr = 'ALL'",
+  "skyflow.utils.enums.EntityType.BANK_ACCOUNT": "attr = 'BANK_ACCOUNT'",
+  "skyflow.utils.enums.EntityType.BLOOD_TYPE": "attr = 'BLOOD_TYPE'",
+  "skyflow.utils.enums.EntityType.CONDITION": "attr = 'CONDITION'",
+  "skyflow.utils.enums.EntityType.CORPORATE_ACTION": "attr = 'CORPORATE_ACTION'",
+  "skyflow.utils.enums.EntityType.CREDIT_CARD": "attr = 'CREDIT_CARD'",
+  "skyflow.utils.enums.EntityType.CREDIT_CARD_EXPIRATION": "attr = 'CREDIT_CARD_EXPIRATION'",
+  "skyflow.utils.enums.EntityType.CVV": "attr = 'CVV'",
+  "skyflow.utils.enums.EntityType.DATE": "attr = 'DATE'",
+  "skyflow.utils.enums.EntityType.DATE_INTERVAL": "attr = 'DATE_INTERVAL'",
+  "skyflow.utils.enums.EntityType.DAY": "attr = 'DAY'",
+  "skyflow.utils.enums.EntityType.DOB": "attr = 'DOB'",
+  "skyflow.utils.enums.EntityType.DOSE": "attr = 'DOSE'",
+  "skyflow.utils.enums.EntityType.DRIVER_LICENSE": "attr = 'DRIVER_LICENSE'",
+  "skyflow.utils.enums.EntityType.DRUG": "attr = 'DRUG'",
+  "skyflow.utils.enums.EntityType.DURATION": "attr = 'DURATION'",
+  "skyflow.utils.enums.EntityType.EFFECT": "attr = 'EFFECT'",
+  "skyflow.utils.enums.EntityType.EMAIL_ADDRESS": "attr = 'EMAIL_ADDRESS'",
+  "skyflow.utils.enums.EntityType.EVENT": "attr = 'EVENT'",
+  "skyflow.utils.enums.EntityType.FILENAME": "attr = 'FILENAME'",
+  "skyflow.utils.enums.EntityType.FINANCIAL_METRIC": "attr = 'FINANCIAL_METRIC'",
+  "skyflow.utils.enums.EntityType.GENDER": "attr = 'GENDER'",
+  "skyflow.utils.enums.EntityType.HEALTHCARE_NUMBER": "attr = 'HEALTHCARE_NUMBER'",
+  "skyflow.utils.enums.EntityType.INJURY": "attr = 'INJURY'",
+  "skyflow.utils.enums.EntityType.IP_ADDRESS": "attr = 'IP_ADDRESS'",
+  "skyflow.utils.enums.EntityType.LANGUAGE": "attr = 'LANGUAGE'",
+  "skyflow.utils.enums.EntityType.LOCATION": "attr = 'LOCATION'",
+  "skyflow.utils.enums.EntityType.LOCATION_ADDRESS": "attr = 'LOCATION_ADDRESS'",
+  "skyflow.utils.enums.EntityType.LOCATION_ADDRESS_STREET": "attr = 'LOCATION_ADDRESS_STREET'",
+  "skyflow.utils.enums.EntityType.LOCATION_CITY": "attr = 'LOCATION_CITY'",
+  "skyflow.utils.enums.EntityType.LOCATION_COORDINATE": "attr = 'LOCATION_COORDINATE'",
+  "skyflow.utils.enums.EntityType.LOCATION_COUNTRY": "attr = 'LOCATION_COUNTRY'",
+  "skyflow.utils.enums.EntityType.LOCATION_STATE": "attr = 'LOCATION_STATE'",
+  "skyflow.utils.enums.EntityType.LOCATION_ZIP": "attr = 'LOCATION_ZIP'",
+  "skyflow.utils.enums.EntityType.MARITAL_STATUS": "attr = 'MARITAL_STATUS'",
+  "skyflow.utils.enums.EntityType.MEDICAL_CODE": "attr = 'MEDICAL_CODE'",
+  "skyflow.utils.enums.EntityType.MEDICAL_PROCESS": "attr = 'MEDICAL_PROCESS'",
+  "skyflow.utils.enums.EntityType.MONEY": "attr = 'MONEY'",
+  "skyflow.utils.enums.EntityType.MONTH": "attr = 'MONTH'",
+  "skyflow.utils.enums.EntityType.NAME": "attr = 'NAME'",
+  "skyflow.utils.enums.EntityType.NAME_FAMILY": "attr = 'NAME_FAMILY'",
+  "skyflow.utils.enums.EntityType.NAME_GIVEN": "attr = 'NAME_GIVEN'",
+  "skyflow.utils.enums.EntityType.NAME_MEDICAL_PROFESSIONAL": "attr = 'NAME_MEDICAL_PROFESSIONAL'",
+  "skyflow.utils.enums.EntityType.NONE": "attr = 'NONE'",
+  "skyflow.utils.enums.EntityType.NUMERICAL_PII": "attr = 'NUMERICAL_PII'",
+  "skyflow.utils.enums.EntityType.OCCUPATION": "attr = 'OCCUPATION'",
+  "skyflow.utils.enums.EntityType.ORGANIZATION": "attr = 'ORGANIZATION'",
+  "skyflow.utils.enums.EntityType.ORGANIZATION_ID": "attr = 'ORGANIZATION_ID'",
+  "skyflow.utils.enums.EntityType.ORGANIZATION_MEDICAL_FACILITY": "attr = 'ORGANIZATION_MEDICAL_FACILITY'",
+  "skyflow.utils.enums.EntityType.ORIGIN": "attr = 'ORIGIN'",
+  "skyflow.utils.enums.EntityType.PASSPORT_NUMBER": "attr = 'PASSPORT_NUMBER'",
+  "skyflow.utils.enums.EntityType.PASSWORD": "attr = 'PASSWORD'",
+  "skyflow.utils.enums.EntityType.PHONE_NUMBER": "attr = 'PHONE_NUMBER'",
+  "skyflow.utils.enums.EntityType.PHYSICAL_ATTRIBUTE": "attr = 'PHYSICAL_ATTRIBUTE'",
+  "skyflow.utils.enums.EntityType.POLITICAL_AFFILIATION": "attr = 'POLITICAL_AFFILIATION'",
+  "skyflow.utils.enums.EntityType.PRODUCT": "attr = 'PRODUCT'",
+  "skyflow.utils.enums.EntityType.PROJECT": "attr = 'PROJECT'",
+  "skyflow.utils.enums.EntityType.RELIGION": "attr = 'RELIGION'",
+  "skyflow.utils.enums.EntityType.ROUTING_NUMBER": "attr = 'ROUTING_NUMBER'",
+  "skyflow.utils.enums.EntityType.SEXUALITY": "attr = 'SEXUALITY'",
+  "skyflow.utils.enums.EntityType.SSN": "attr = 'SSN'",
+  "skyflow.utils.enums.EntityType.STATISTICS": "attr = 'STATISTICS'",
+  "skyflow.utils.enums.EntityType.TIME": "attr = 'TIME'",
+  "skyflow.utils.enums.EntityType.TREND": "attr = 'TREND'",
+  "skyflow.utils.enums.EntityType.URL": "attr = 'URL'",
+  "skyflow.utils.enums.EntityType.USERNAME": "attr = 'USERNAME'",
+  "skyflow.utils.enums.EntityType.VEHICLE_ID": "attr = 'VEHICLE_ID'",
+  "skyflow.utils.enums.EntityType.YEAR": "attr = 'YEAR'",
+  "skyflow.utils.enums.EntityType.ZODIAC_SIGN": "attr = 'ZODIAC_SIGN'",
   "skyflow.utils.enums.Env": "class (Enum)",
   "skyflow.utils.enums.Env.DEV": "attr = 'DEV'",
   "skyflow.utils.enums.Env.PROD": "attr = 'PROD'",
@@ -119,6 +207,34 @@
   "skyflow.utils.enums.EnvUrls.PROD": "attr = 'vault.skyflowapis.com'",
   "skyflow.utils.enums.EnvUrls.SANDBOX": "attr = 'vault.skyflowapis-preview.com'",
   "skyflow.utils.enums.EnvUrls.STAGE": "attr = 'vault.skyflowapis.tech'",
+  "skyflow.utils.enums.FileDataFormat": "class (Enum)",
+  "skyflow.utils.enums.FileDataFormat.BMP": "attr = 'bmp'",
+  "skyflow.utils.enums.FileDataFormat.CSV": "attr = 'csv'",
+  "skyflow.utils.enums.FileDataFormat.DCM": "attr = 'dcm'",
+  "skyflow.utils.enums.FileDataFormat.DOC": "attr = 'doc'",
+  "skyflow.utils.enums.FileDataFormat.DOCX": "attr = 'docx'",
+  "skyflow.utils.enums.FileDataFormat.GIF": "attr = 'gif'",
+  "skyflow.utils.enums.FileDataFormat.JPEG": "attr = 'jpeg'",
+  "skyflow.utils.enums.FileDataFormat.JPG": "attr = 'jpg'",
+  "skyflow.utils.enums.FileDataFormat.JSON": "attr = 'json'",
+  "skyflow.utils.enums.FileDataFormat.JSONL": "attr = 'jsonl'",
+  "skyflow.utils.enums.FileDataFormat.MP3": "attr = 'mp3'",
+  "skyflow.utils.enums.FileDataFormat.PDF": "attr = 'pdf'",
+  "skyflow.utils.enums.FileDataFormat.PNG": "attr = 'png'",
+  "skyflow.utils.enums.FileDataFormat.PPT": "attr = 'ppt'",
+  "skyflow.utils.enums.FileDataFormat.PPTX": "attr = 'pptx'",
+  "skyflow.utils.enums.FileDataFormat.TIF": "attr = 'tif'",
+  "skyflow.utils.enums.FileDataFormat.TIFF": "attr = 'tiff'",
+  "skyflow.utils.enums.FileDataFormat.TXT": "attr = 'txt'",
+  "skyflow.utils.enums.FileDataFormat.WAV": "attr = 'wav'",
+  "skyflow.utils.enums.FileDataFormat.XLS": "attr = 'xls'",
+  "skyflow.utils.enums.FileDataFormat.XLSX": "attr = 'xlsx'",
+  "skyflow.utils.enums.FileDataFormat.XML": "attr = 'xml'",
+  "skyflow.utils.enums.FileDataFormat.ZIP": "attr = 'zip'",
+  "skyflow.utils.enums.GuardrailsValidation": "class (Enum)",
+  "skyflow.utils.enums.GuardrailsValidation.FAILED": "attr = 'FAILED'",
+  "skyflow.utils.enums.GuardrailsValidation.PASSED": "attr = 'PASSED'",
+  "skyflow.utils.enums.GuardrailsValidation.UNKNOWN": "attr = 'UNKNOWN'",
   "skyflow.utils.enums.LogLevel": "class (Enum)",
   "skyflow.utils.enums.LogLevel.DEBUG": "attr = 1",
   "skyflow.utils.enums.LogLevel.ERROR": "attr = 4",
@@ -126,19 +242,48 @@
   "skyflow.utils.enums.LogLevel.OFF": "attr = 5",
   "skyflow.utils.enums.LogLevel.WARN": "attr = 3",
   "skyflow.utils.enums.MaskingMethod": "class (Enum)",
-  "skyflow.utils.enums.MaskingMethod.BLACKBOX": "attr = 'blackbox'",
-  "skyflow.utils.enums.MaskingMethod.BLUR": "attr = 'blur'",
+  "skyflow.utils.enums.MaskingMethod.BLACKBOX": "attr = 'BLACKBOX'",
+  "skyflow.utils.enums.MaskingMethod.BLUR": "attr = 'BLUR'",
+  "skyflow.utils.enums.MaskingMethod.NONE": "attr = 'NONE'",
+  "skyflow.utils.enums.ObjectDeidentificationType": "class (Enum)",
+  "skyflow.utils.enums.ObjectDeidentificationType.REDACT": "attr = 'REDACT'",
+  "skyflow.utils.enums.ObjectDeidentificationType.UNKNOWN": "attr = 'UNKNOWN'",
+  "skyflow.utils.enums.ObjectDeidentificationType.UNREDACT": "attr = 'UNREDACT'",
+  "skyflow.utils.enums.ObjectEntityType": "class (Enum)",
+  "skyflow.utils.enums.ObjectEntityType.ALL": "attr = 'ALL'",
+  "skyflow.utils.enums.ObjectEntityType.FACE": "attr = 'FACE'",
+  "skyflow.utils.enums.ObjectEntityType.LICENSE_PLATE": "attr = 'LICENSE_PLATE'",
+  "skyflow.utils.enums.ObjectEntityType.LOGO": "attr = 'LOGO'",
+  "skyflow.utils.enums.ObjectEntityType.NONE": "attr = 'NONE'",
+  "skyflow.utils.enums.ObjectEntityType.SIGNATURE": "attr = 'SIGNATURE'",
+  "skyflow.utils.enums.OutputTranscriptionType": "class (Enum)",
+  "skyflow.utils.enums.OutputTranscriptionType.DIARIZED_TRANSCRIPTION": "attr = 'DIARIZED_TRANSCRIPTION'",
+  "skyflow.utils.enums.OutputTranscriptionType.MEDICAL_DIARIZED_TRANSCRIPTION": "attr = 'MEDICAL_DIARIZED_TRANSCRIPTION'",
+  "skyflow.utils.enums.OutputTranscriptionType.MEDICAL_TRANSCRIPTION": "attr = 'MEDICAL_TRANSCRIPTION'",
+  "skyflow.utils.enums.OutputTranscriptionType.NONE": "attr = 'NONE'",
+  "skyflow.utils.enums.OutputTranscriptionType.TRANSCRIPTION": "attr = 'TRANSCRIPTION'",
+  "skyflow.utils.enums.PdfProcessingMode": "class (Enum)",
+  "skyflow.utils.enums.PdfProcessingMode.NONE": "attr = 'NONE'",
+  "skyflow.utils.enums.PdfProcessingMode.OCR": "attr = 'OCR'",
+  "skyflow.utils.enums.PdfProcessingMode.TEXT_LAYER": "attr = 'TEXT_LAYER'",
   "skyflow.utils.enums.RedactionType": "class (Enum)",
   "skyflow.utils.enums.RedactionType.DEFAULT": "attr = 'DEFAULT'",
   "skyflow.utils.enums.RedactionType.MASKED": "attr = 'MASKED'",
   "skyflow.utils.enums.RedactionType.PLAIN_TEXT": "attr = 'PLAIN_TEXT'",
   "skyflow.utils.enums.RedactionType.REDACTED": "attr = 'REDACTED'",
+  "skyflow.utils.enums.ReidentifySourceType": "class (Enum)",
+  "skyflow.utils.enums.ReidentifySourceType.BASE64": "attr = 'BASE64'",
+  "skyflow.utils.enums.ReidentifySourceType.PRESIGNED_URL": "attr = 'PRESIGNED_URL'",
   "skyflow.utils.enums.RequestMethod": "class (Enum)",
   "skyflow.utils.enums.RequestMethod.DELETE": "attr = 'DELETE'",
   "skyflow.utils.enums.RequestMethod.GET": "attr = 'GET'",
   "skyflow.utils.enums.RequestMethod.NONE": "attr = 'NONE'",
   "skyflow.utils.enums.RequestMethod.POST": "attr = 'POST'",
   "skyflow.utils.enums.RequestMethod.PUT": "attr = 'PUT'",
+  "skyflow.utils.enums.ReturnEntitiesType": "class (Enum)",
+  "skyflow.utils.enums.ReturnEntitiesType.ALL": "attr = 'ALL'",
+  "skyflow.utils.enums.ReturnEntitiesType.EXCLUDE_SENSITIVE_DATA": "attr = 'EXCLUDE_SENSITIVE_DATA'",
+  "skyflow.utils.enums.ReturnEntitiesType.NONE": "attr = 'NONE'",
   "skyflow.utils.enums.TokenMode": "class (Enum)",
   "skyflow.utils.enums.TokenMode.DISABLE": "attr = 'DISABLE'",
   "skyflow.utils.enums.TokenMode.ENABLE": "attr = 'ENABLE'",
@@ -162,12 +307,6 @@
   "skyflow.vault.controller.Connection": "class ()",
   "skyflow.vault.controller.Connection.__init__": "def (self, vault_client)",
   "skyflow.vault.controller.Connection.invoke": "def (self, request: InvokeConnectionRequest)",
-  "skyflow.vault.controller.Detect": "class ()",
-  "skyflow.vault.controller.Detect.__init__": "def (self, vault_client)",
-  "skyflow.vault.controller.Detect.deidentify_file": "def (self, request: DeidentifyFileRequest)",
-  "skyflow.vault.controller.Detect.deidentify_text": "def (self, request: DeidentifyTextRequest) -> DeidentifyTextResponse",
-  "skyflow.vault.controller.Detect.get_detect_run": "def (self, request: GetDetectRunRequest)",
-  "skyflow.vault.controller.Detect.reidentify_text": "def (self, request: ReidentifyTextRequest) -> ReidentifyTextResponse",
   "skyflow.vault.controller.Vault": "attr",
   "skyflow.vault.controller.VaultController": "class (BaseVaultController)",
   "skyflow.vault.controller.VaultController.__init__": "def (self, vault_client)",
@@ -244,104 +383,42 @@
   "skyflow.vault.data.UpdateResponse.updated_field": "attr",
   "skyflow.vault.data.UploadFileRequest": "class ()",
   "skyflow.vault.data.UploadFileRequest.__init__": "def (self)",
-  "skyflow.vault.detect.Bleep": "class ()",
-  "skyflow.vault.detect.Bleep.__init__": "def (self, gain: Optional[float] = None, frequency: Optional[float] = None, start_padding: Optional[float] = None, stop_padding: Optional[float] = None)",
-  "skyflow.vault.detect.Bleep.frequency": "attr",
-  "skyflow.vault.detect.Bleep.gain": "attr",
-  "skyflow.vault.detect.Bleep.start_padding": "attr",
-  "skyflow.vault.detect.Bleep.stop_padding": "attr",
-  "skyflow.vault.detect.DateTransformation": "class ()",
-  "skyflow.vault.detect.DateTransformation.__init__": "def (self, max_days: int, min_days: int, entities: List[DetectEntities])",
-  "skyflow.vault.detect.DateTransformation.entities": "attr",
-  "skyflow.vault.detect.DateTransformation.max": "attr",
-  "skyflow.vault.detect.DateTransformation.min": "attr",
-  "skyflow.vault.detect.DeidentifyFileRequest": "class ()",
-  "skyflow.vault.detect.DeidentifyFileRequest.__init__": "def (self, file = None, entities: Optional[List[DetectEntities]] = None, allow_regex_list: Optional[List[str]] = None, restrict_regex_list: Optional[List[str]] = None, token_format: Optional[TokenFormat] = None, transformations: Optional[Transformations] = None, output_processed_image: Optional[bool] = None, output_ocr_text: Optional[bool] = None, masking_method: Optional[MaskingMethod] = None, pixel_density: Optional[Union[int, float]] = None, max_resolution: Optional[Union[int, float]] = None, output_processed_audio: Optional[bool] = None, output_transcription: Optional[DetectOutputTranscriptions] = None, bleep: Optional[Bleep] = None, output_directory: Optional[str] = None, wait_time: Optional[Union[int, float]] = None)",
-  "skyflow.vault.detect.DeidentifyFileRequest.allow_regex_list": "attr: Optional[List[str]]",
-  "skyflow.vault.detect.DeidentifyFileRequest.bleep": "attr: Optional[Bleep]",
-  "skyflow.vault.detect.DeidentifyFileRequest.entities": "attr: Optional[List[DetectEntities]]",
-  "skyflow.vault.detect.DeidentifyFileRequest.file": "attr: FileInput",
-  "skyflow.vault.detect.DeidentifyFileRequest.masking_method": "attr: Optional[MaskingMethod]",
-  "skyflow.vault.detect.DeidentifyFileRequest.max_resolution": "attr: Optional[Union[int, float]]",
-  "skyflow.vault.detect.DeidentifyFileRequest.output_directory": "attr: Optional[str]",
-  "skyflow.vault.detect.DeidentifyFileRequest.output_ocr_text": "attr: Optional[bool]",
-  "skyflow.vault.detect.DeidentifyFileRequest.output_processed_audio": "attr: Optional[bool]",
-  "skyflow.vault.detect.DeidentifyFileRequest.output_processed_image": "attr: Optional[bool]",
-  "skyflow.vault.detect.DeidentifyFileRequest.output_transcription": "attr: Optional[DetectOutputTranscriptions]",
-  "skyflow.vault.detect.DeidentifyFileRequest.pixel_density": "attr: Optional[Union[int, float]]",
-  "skyflow.vault.detect.DeidentifyFileRequest.restrict_regex_list": "attr: Optional[List[str]]",
-  "skyflow.vault.detect.DeidentifyFileRequest.token_format": "attr: Optional[TokenFormat]",
-  "skyflow.vault.detect.DeidentifyFileRequest.transformations": "attr: Optional[Transformations]",
-  "skyflow.vault.detect.DeidentifyFileRequest.wait_time": "attr: Optional[Union[int, float]]",
-  "skyflow.vault.detect.DeidentifyFileResponse": "class ()",
-  "skyflow.vault.detect.DeidentifyFileResponse.__init__": "def (self, file_base64: Optional[str] = None, file: Optional[io.BytesIO] = None, type: Optional[str] = None, extension: Optional[str] = None, word_count: Optional[int] = None, char_count: Optional[int] = None, size_in_kb: Optional[float] = None, duration_in_seconds: Optional[float] = None, page_count: Optional[int] = None, slide_count: Optional[int] = None, entities: Optional[list] = None, run_id: Optional[str] = None, status: Optional[str] = None, errors: Optional[list] = None)",
-  "skyflow.vault.detect.DeidentifyFileResponse.char_count": "attr",
-  "skyflow.vault.detect.DeidentifyFileResponse.duration_in_seconds": "attr",
-  "skyflow.vault.detect.DeidentifyFileResponse.entities": "attr",
-  "skyflow.vault.detect.DeidentifyFileResponse.errors": "attr",
-  "skyflow.vault.detect.DeidentifyFileResponse.extension": "attr",
-  "skyflow.vault.detect.DeidentifyFileResponse.file": "attr",
-  "skyflow.vault.detect.DeidentifyFileResponse.file_base64": "attr",
-  "skyflow.vault.detect.DeidentifyFileResponse.page_count": "attr",
-  "skyflow.vault.detect.DeidentifyFileResponse.run_id": "attr",
-  "skyflow.vault.detect.DeidentifyFileResponse.size_in_kb": "attr",
-  "skyflow.vault.detect.DeidentifyFileResponse.slide_count": "attr",
-  "skyflow.vault.detect.DeidentifyFileResponse.status": "attr",
-  "skyflow.vault.detect.DeidentifyFileResponse.type": "attr",
-  "skyflow.vault.detect.DeidentifyFileResponse.word_count": "attr",
-  "skyflow.vault.detect.DeidentifyTextRequest": "class ()",
-  "skyflow.vault.detect.DeidentifyTextRequest.__init__": "def (self, text: str, entities: Optional[List[DetectEntities]] = None, allow_regex_list: Optional[List[str]] = None, restrict_regex_list: Optional[List[str]] = None, token_format: Optional[TokenFormat] = None, transformations: Optional[Transformations] = None)",
-  "skyflow.vault.detect.DeidentifyTextRequest.allow_regex_list": "attr",
-  "skyflow.vault.detect.DeidentifyTextRequest.entities": "attr",
-  "skyflow.vault.detect.DeidentifyTextRequest.restrict_regex_list": "attr",
-  "skyflow.vault.detect.DeidentifyTextRequest.text": "attr",
-  "skyflow.vault.detect.DeidentifyTextRequest.token_format": "attr",
-  "skyflow.vault.detect.DeidentifyTextRequest.transformations": "attr",
-  "skyflow.vault.detect.DeidentifyTextResponse": "class ()",
-  "skyflow.vault.detect.DeidentifyTextResponse.__init__": "def (self, processed_text: str, entities: List[EntityInfo], word_count: int, char_count: int, errors: Optional[list] = None)",
-  "skyflow.vault.detect.DeidentifyTextResponse.char_count": "attr",
-  "skyflow.vault.detect.DeidentifyTextResponse.entities": "attr",
-  "skyflow.vault.detect.DeidentifyTextResponse.errors": "attr",
-  "skyflow.vault.detect.DeidentifyTextResponse.processed_text": "attr",
-  "skyflow.vault.detect.DeidentifyTextResponse.word_count": "attr",
-  "skyflow.vault.detect.EntityInfo": "class ()",
-  "skyflow.vault.detect.EntityInfo.__init__": "def (self, token: str, value: str, text_index: TextIndex, processed_index: TextIndex, entity: str, scores: Dict[str, float])",
-  "skyflow.vault.detect.EntityInfo.entity": "attr",
-  "skyflow.vault.detect.EntityInfo.processed_index": "attr",
-  "skyflow.vault.detect.EntityInfo.scores": "attr",
-  "skyflow.vault.detect.EntityInfo.text_index": "attr",
-  "skyflow.vault.detect.EntityInfo.token": "attr",
-  "skyflow.vault.detect.EntityInfo.value": "attr",
-  "skyflow.vault.detect.FileInput": "class ()",
-  "skyflow.vault.detect.FileInput.__init__": "def (self, file: BufferedReader = None, file_path: str = None)",
-  "skyflow.vault.detect.FileInput.file": "attr",
-  "skyflow.vault.detect.FileInput.file_path": "attr",
-  "skyflow.vault.detect.GetDetectRunRequest": "class ()",
-  "skyflow.vault.detect.GetDetectRunRequest.__init__": "def (self, run_id: str)",
-  "skyflow.vault.detect.GetDetectRunRequest.run_id": "attr: str",
-  "skyflow.vault.detect.ReidentifyTextRequest": "class ()",
-  "skyflow.vault.detect.ReidentifyTextRequest.__init__": "def (self, text: str, redacted_entities: Optional[List[DetectEntities]] = None, masked_entities: Optional[List[DetectEntities]] = None, plain_text_entities: Optional[List[DetectEntities]] = None)",
-  "skyflow.vault.detect.ReidentifyTextRequest.masked_entities": "attr",
-  "skyflow.vault.detect.ReidentifyTextRequest.plain_text_entities": "attr",
-  "skyflow.vault.detect.ReidentifyTextRequest.redacted_entities": "attr",
-  "skyflow.vault.detect.ReidentifyTextRequest.text": "attr",
-  "skyflow.vault.detect.ReidentifyTextResponse": "class ()",
-  "skyflow.vault.detect.ReidentifyTextResponse.__init__": "def (self, processed_text: str, errors: Optional[list] = None)",
-  "skyflow.vault.detect.ReidentifyTextResponse.errors": "attr",
-  "skyflow.vault.detect.ReidentifyTextResponse.processed_text": "attr",
-  "skyflow.vault.detect.TextIndex": "class ()",
-  "skyflow.vault.detect.TextIndex.__init__": "def (self, start: int, end: int)",
-  "skyflow.vault.detect.TextIndex.end": "attr",
-  "skyflow.vault.detect.TextIndex.start": "attr",
-  "skyflow.vault.detect.TokenFormat": "class ()",
-  "skyflow.vault.detect.TokenFormat.__init__": "def (self, default: TokenType = TokenType.ENTITY_UNIQUE_COUNTER, vault_token: List[DetectEntities] = None, entity_unique_counter: List[DetectEntities] = None, entity_only: List[DetectEntities] = None)",

@github-actions

github-actions Bot commented Oct 26, 2026 •

Copy link
Copy Markdown

Public API contract change (flowvault)

This PR changes flowvault/api-report/skyflow.api.json (the approved public API contract for skyflow). Review the surface change below:

diff --git a/flowvault/api-report/skyflow.api.json b/flowvault/api-report/skyflow.api.json
index ecee35b..97504b2 100644
--- a/flowvault/api-report/skyflow.api.json
+++ b/flowvault/api-report/skyflow.api.json
@@ -29,15 +29,167 @@
   "skyflow.utils.enums.CustomHeaderKey.REQUEST_ID_HEADER": "attr = 'x-request-id'",
   "skyflow.utils.enums.CustomHeaderKey.SKYFLOW_ACCOUNT_ID": "attr = 'x-skyflow-account-id'",
   "skyflow.utils.enums.CustomHeaderKey.SKYFLOW_ACCOUNT_NAME": "attr = 'x-skyflow-account-name'",
+  "skyflow.utils.enums.DeidentificationType": "class (Enum)",
+  "skyflow.utils.enums.DeidentificationType.ENTITY_ONLY": "attr = 'ENTITY_ONLY'",
+  "skyflow.utils.enums.DeidentificationType.ENTITY_UNIQUE_COUNTER": "attr = 'ENTITY_UNIQUE_COUNTER'",
+  "skyflow.utils.enums.DeidentificationType.MASK": "attr = 'MASK'",
+  "skyflow.utils.enums.DeidentificationType.UNKNOWN": "attr = 'UNKNOWN'",
+  "skyflow.utils.enums.DeidentificationType.VAULT_TOKEN": "attr = 'VAULT_TOKEN'",
+  "skyflow.utils.enums.DeidentifySourceType": "class (Enum)",
+  "skyflow.utils.enums.DeidentifySourceType.BASE64": "attr = 'BASE64'",
+  "skyflow.utils.enums.DeidentifySourceType.PRESIGNED_URL": "attr = 'PRESIGNED_URL'",
+  "skyflow.utils.enums.DetectRunStatus": "class (Enum)",
+  "skyflow.utils.enums.DetectRunStatus.FAILED": "attr = 'FAILED'",
+  "skyflow.utils.enums.DetectRunStatus.IN_PROGRESS": "attr = 'IN_PROGRESS'",
+  "skyflow.utils.enums.DetectRunStatus.QUEUED": "attr = 'QUEUED'",
+  "skyflow.utils.enums.DetectRunStatus.SUCCESS": "attr = 'SUCCESS'",
+  "skyflow.utils.enums.DetectRunStatus.UNKNOWN": "attr = 'UNKNOWN'",
+  "skyflow.utils.enums.EntityType": "class (Enum)",
+  "skyflow.utils.enums.EntityType.ACCOUNT_NUMBER": "attr = 'ACCOUNT_NUMBER'",
+  "skyflow.utils.enums.EntityType.AGE": "attr = 'AGE'",
+  "skyflow.utils.enums.EntityType.ALL": "attr = 'ALL'",
+  "skyflow.utils.enums.EntityType.BANK_ACCOUNT": "attr = 'BANK_ACCOUNT'",
+  "skyflow.utils.enums.EntityType.BLOOD_TYPE": "attr = 'BLOOD_TYPE'",
+  "skyflow.utils.enums.EntityType.CONDITION": "attr = 'CONDITION'",
+  "skyflow.utils.enums.EntityType.CORPORATE_ACTION": "attr = 'CORPORATE_ACTION'",
+  "skyflow.utils.enums.EntityType.CREDIT_CARD": "attr = 'CREDIT_CARD'",
+  "skyflow.utils.enums.EntityType.CREDIT_CARD_EXPIRATION": "attr = 'CREDIT_CARD_EXPIRATION'",
+  "skyflow.utils.enums.EntityType.CVV": "attr = 'CVV'",
+  "skyflow.utils.enums.EntityType.DATE": "attr = 'DATE'",
+  "skyflow.utils.enums.EntityType.DATE_INTERVAL": "attr = 'DATE_INTERVAL'",
+  "skyflow.utils.enums.EntityType.DAY": "attr = 'DAY'",
+  "skyflow.utils.enums.EntityType.DOB": "attr = 'DOB'",
+  "skyflow.utils.enums.EntityType.DOSE": "attr = 'DOSE'",
+  "skyflow.utils.enums.EntityType.DRIVER_LICENSE": "attr = 'DRIVER_LICENSE'",
+  "skyflow.utils.enums.EntityType.DRUG": "attr = 'DRUG'",
+  "skyflow.utils.enums.EntityType.DURATION": "attr = 'DURATION'",
+  "skyflow.utils.enums.EntityType.EFFECT": "attr = 'EFFECT'",
+  "skyflow.utils.enums.EntityType.EMAIL_ADDRESS": "attr = 'EMAIL_ADDRESS'",
+  "skyflow.utils.enums.EntityType.EVENT": "attr = 'EVENT'",
+  "skyflow.utils.enums.EntityType.FILENAME": "attr = 'FILENAME'",
+  "skyflow.utils.enums.EntityType.FINANCIAL_METRIC": "attr = 'FINANCIAL_METRIC'",
+  "skyflow.utils.enums.EntityType.GENDER": "attr = 'GENDER'",
+  "skyflow.utils.enums.EntityType.HEALTHCARE_NUMBER": "attr = 'HEALTHCARE_NUMBER'",
+  "skyflow.utils.enums.EntityType.INJURY": "attr = 'INJURY'",
+  "skyflow.utils.enums.EntityType.IP_ADDRESS": "attr = 'IP_ADDRESS'",
+  "skyflow.utils.enums.EntityType.LANGUAGE": "attr = 'LANGUAGE'",
+  "skyflow.utils.enums.EntityType.LOCATION": "attr = 'LOCATION'",
+  "skyflow.utils.enums.EntityType.LOCATION_ADDRESS": "attr = 'LOCATION_ADDRESS'",
+  "skyflow.utils.enums.EntityType.LOCATION_ADDRESS_STREET": "attr = 'LOCATION_ADDRESS_STREET'",
+  "skyflow.utils.enums.EntityType.LOCATION_CITY": "attr = 'LOCATION_CITY'",
+  "skyflow.utils.enums.EntityType.LOCATION_COORDINATE": "attr = 'LOCATION_COORDINATE'",
+  "skyflow.utils.enums.EntityType.LOCATION_COUNTRY": "attr = 'LOCATION_COUNTRY'",
+  "skyflow.utils.enums.EntityType.LOCATION_STATE": "attr = 'LOCATION_STATE'",
+  "skyflow.utils.enums.EntityType.LOCATION_ZIP": "attr = 'LOCATION_ZIP'",
+  "skyflow.utils.enums.EntityType.MARITAL_STATUS": "attr = 'MARITAL_STATUS'",
+  "skyflow.utils.enums.EntityType.MEDICAL_CODE": "attr = 'MEDICAL_CODE'",
+  "skyflow.utils.enums.EntityType.MEDICAL_PROCESS": "attr = 'MEDICAL_PROCESS'",
+  "skyflow.utils.enums.EntityType.MONEY": "attr = 'MONEY'",
+  "skyflow.utils.enums.EntityType.MONTH": "attr = 'MONTH'",
+  "skyflow.utils.enums.EntityType.NAME": "attr = 'NAME'",
+  "skyflow.utils.enums.EntityType.NAME_FAMILY": "attr = 'NAME_FAMILY'",
+  "skyflow.utils.enums.EntityType.NAME_GIVEN": "attr = 'NAME_GIVEN'",
+  "skyflow.utils.enums.EntityType.NAME_MEDICAL_PROFESSIONAL": "attr = 'NAME_MEDICAL_PROFESSIONAL'",
+  "skyflow.utils.enums.EntityType.NONE": "attr = 'NONE'",
+  "skyflow.utils.enums.EntityType.NUMERICAL_PII": "attr = 'NUMERICAL_PII'",
+  "skyflow.utils.enums.EntityType.OCCUPATION": "attr = 'OCCUPATION'",
+  "skyflow.utils.enums.EntityType.ORGANIZATION": "attr = 'ORGANIZATION'",
+  "skyflow.utils.enums.EntityType.ORGANIZATION_ID": "attr = 'ORGANIZATION_ID'",
+  "skyflow.utils.enums.EntityType.ORGANIZATION_MEDICAL_FACILITY": "attr = 'ORGANIZATION_MEDICAL_FACILITY'",
+  "skyflow.utils.enums.EntityType.ORIGIN": "attr = 'ORIGIN'",
+  "skyflow.utils.enums.EntityType.PASSPORT_NUMBER": "attr = 'PASSPORT_NUMBER'",
+  "skyflow.utils.enums.EntityType.PASSWORD": "attr = 'PASSWORD'",
+  "skyflow.utils.enums.EntityType.PHONE_NUMBER": "attr = 'PHONE_NUMBER'",
+  "skyflow.utils.enums.EntityType.PHYSICAL_ATTRIBUTE": "attr = 'PHYSICAL_ATTRIBUTE'",
+  "skyflow.utils.enums.EntityType.POLITICAL_AFFILIATION": "attr = 'POLITICAL_AFFILIATION'",
+  "skyflow.utils.enums.EntityType.PRODUCT": "attr = 'PRODUCT'",
+  "skyflow.utils.enums.EntityType.PROJECT": "attr = 'PROJECT'",
+  "skyflow.utils.enums.EntityType.RELIGION": "attr = 'RELIGION'",
+  "skyflow.utils.enums.EntityType.ROUTING_NUMBER": "attr = 'ROUTING_NUMBER'",
+  "skyflow.utils.enums.EntityType.SEXUALITY": "attr = 'SEXUALITY'",
+  "skyflow.utils.enums.EntityType.SSN": "attr = 'SSN'",
+  "skyflow.utils.enums.EntityType.STATISTICS": "attr = 'STATISTICS'",
+  "skyflow.utils.enums.EntityType.TIME": "attr = 'TIME'",
+  "skyflow.utils.enums.EntityType.TREND": "attr = 'TREND'",
+  "skyflow.utils.enums.EntityType.URL": "attr = 'URL'",
+  "skyflow.utils.enums.EntityType.USERNAME": "attr = 'USERNAME'",
+  "skyflow.utils.enums.EntityType.VEHICLE_ID": "attr = 'VEHICLE_ID'",
+  "skyflow.utils.enums.EntityType.YEAR": "attr = 'YEAR'",
+  "skyflow.utils.enums.EntityType.ZODIAC_SIGN": "attr = 'ZODIAC_SIGN'",
   "skyflow.utils.enums.EnvUrls": "class (Enum)",
   "skyflow.utils.enums.EnvUrls.DEV": "attr = 'skyvault.skyflowapis.dev'",
   "skyflow.utils.enums.EnvUrls.PROD": "attr = 'skyvault.skyflowapis.com'",
   "skyflow.utils.enums.EnvUrls.SANDBOX": "attr = 'skyvault.skyflowapis-preview.com'",
   "skyflow.utils.enums.EnvUrls.STAGE": "attr = 'skyvault.skyflowapis.tech'",
+  "skyflow.utils.enums.FileDataFormat": "class (Enum)",
+  "skyflow.utils.enums.FileDataFormat.BMP": "attr = 'bmp'",
+  "skyflow.utils.enums.FileDataFormat.CSV": "attr = 'csv'",
+  "skyflow.utils.enums.FileDataFormat.DCM": "attr = 'dcm'",
+  "skyflow.utils.enums.FileDataFormat.DOC": "attr = 'doc'",
+  "skyflow.utils.enums.FileDataFormat.DOCX": "attr = 'docx'",
+  "skyflow.utils.enums.FileDataFormat.GIF": "attr = 'gif'",
+  "skyflow.utils.enums.FileDataFormat.JPEG": "attr = 'jpeg'",
+  "skyflow.utils.enums.FileDataFormat.JPG": "attr = 'jpg'",
+  "skyflow.utils.enums.FileDataFormat.JSON": "attr = 'json'",
+  "skyflow.utils.enums.FileDataFormat.JSONL": "attr = 'jsonl'",
+  "skyflow.utils.enums.FileDataFormat.MP3": "attr = 'mp3'",
+  "skyflow.utils.enums.FileDataFormat.PDF": "attr = 'pdf'",
+  "skyflow.utils.enums.FileDataFormat.PNG": "attr = 'png'",
+  "skyflow.utils.enums.FileDataFormat.PPT": "attr = 'ppt'",
+  "skyflow.utils.enums.FileDataFormat.PPTX": "attr = 'pptx'",
+  "skyflow.utils.enums.FileDataFormat.TIF": "attr = 'tif'",
+  "skyflow.utils.enums.FileDataFormat.TIFF": "attr = 'tiff'",
+  "skyflow.utils.enums.FileDataFormat.TXT": "attr = 'txt'",
+  "skyflow.utils.enums.FileDataFormat.WAV": "attr = 'wav'",
+  "skyflow.utils.enums.FileDataFormat.XLS": "attr = 'xls'",
+  "skyflow.utils.enums.FileDataFormat.XLSX": "attr = 'xlsx'",
+  "skyflow.utils.enums.FileDataFormat.XML": "attr = 'xml'",
+  "skyflow.utils.enums.FileDataFormat.ZIP": "attr = 'zip'",
   "skyflow.utils.enums.FileUploadStatus": "class (Enum)",
   "skyflow.utils.enums.FileUploadStatus.FAILED": "attr = 'FAILED'",
   "skyflow.utils.enums.FileUploadStatus.SKIPPED": "attr = 'SKIPPED'",
   "skyflow.utils.enums.FileUploadStatus.UPLOADED": "attr = 'UPLOADED'",
+  "skyflow.utils.enums.GuardrailsValidation": "class (Enum)",
+  "skyflow.utils.enums.GuardrailsValidation.FAILED": "attr = 'FAILED'",
+  "skyflow.utils.enums.GuardrailsValidation.PASSED": "attr = 'PASSED'",
+  "skyflow.utils.enums.GuardrailsValidation.UNKNOWN": "attr = 'UNKNOWN'",
+  "skyflow.utils.enums.MaskingMethod": "class (Enum)",
+  "skyflow.utils.enums.MaskingMethod.BLACKBOX": "attr = 'BLACKBOX'",
+  "skyflow.utils.enums.MaskingMethod.BLUR": "attr = 'BLUR'",
+  "skyflow.utils.enums.MaskingMethod.NONE": "attr = 'NONE'",
+  "skyflow.utils.enums.ObjectDeidentificationType": "class (Enum)",
+  "skyflow.utils.enums.ObjectDeidentificationType.REDACT": "attr = 'REDACT'",
+  "skyflow.utils.enums.ObjectDeidentificationType.UNKNOWN": "attr = 'UNKNOWN'",
+  "skyflow.utils.enums.ObjectDeidentificationType.UNREDACT": "attr = 'UNREDACT'",
+  "skyflow.utils.enums.ObjectEntityType": "class (Enum)",
+  "skyflow.utils.enums.ObjectEntityType.ALL": "attr = 'ALL'",
+  "skyflow.utils.enums.ObjectEntityType.FACE": "attr = 'FACE'",
+  "skyflow.utils.enums.ObjectEntityType.LICENSE_PLATE": "attr = 'LICENSE_PLATE'",
+  "skyflow.utils.enums.ObjectEntityType.LOGO": "attr = 'LOGO'",
+  "skyflow.utils.enums.ObjectEntityType.NONE": "attr = 'NONE'",
+  "skyflow.utils.enums.ObjectEntityType.SIGNATURE": "attr = 'SIGNATURE'",
+  "skyflow.utils.enums.OutputTranscriptionType": "class (Enum)",
+  "skyflow.utils.enums.OutputTranscriptionType.DIARIZED_TRANSCRIPTION": "attr = 'DIARIZED_TRANSCRIPTION'",
+  "skyflow.utils.enums.OutputTranscriptionType.MEDICAL_DIARIZED_TRANSCRIPTION": "attr = 'MEDICAL_DIARIZED_TRANSCRIPTION'",
+  "skyflow.utils.enums.OutputTranscriptionType.MEDICAL_TRANSCRIPTION": "attr = 'MEDICAL_TRANSCRIPTION'",
+  "skyflow.utils.enums.OutputTranscriptionType.NONE": "attr = 'NONE'",
+  "skyflow.utils.enums.OutputTranscriptionType.TRANSCRIPTION": "attr = 'TRANSCRIPTION'",
+  "skyflow.utils.enums.PdfProcessingMode": "class (Enum)",
+  "skyflow.utils.enums.PdfProcessingMode.NONE": "attr = 'NONE'",
+  "skyflow.utils.enums.PdfProcessingMode.OCR": "attr = 'OCR'",
+  "skyflow.utils.enums.PdfProcessingMode.TEXT_LAYER": "attr = 'TEXT_LAYER'",
+  "skyflow.utils.enums.RedactionType": "class (Enum)",
+  "skyflow.utils.enums.RedactionType.DEFAULT": "attr = 'DEFAULT'",
+  "skyflow.utils.enums.RedactionType.MASKED": "attr = 'MASKED'",
+  "skyflow.utils.enums.RedactionType.PLAIN_TEXT": "attr = 'PLAIN_TEXT'",
+  "skyflow.utils.enums.RedactionType.REDACTED": "attr = 'REDACTED'",
+  "skyflow.utils.enums.ReidentifySourceType": "class (Enum)",
+  "skyflow.utils.enums.ReidentifySourceType.BASE64": "attr = 'BASE64'",
+  "skyflow.utils.enums.ReidentifySourceType.PRESIGNED_URL": "attr = 'PRESIGNED_URL'",
+  "skyflow.utils.enums.ReturnEntitiesType": "class (Enum)",
+  "skyflow.utils.enums.ReturnEntitiesType.ALL": "attr = 'ALL'",
+  "skyflow.utils.enums.ReturnEntitiesType.EXCLUDE_SENSITIVE_DATA": "attr = 'EXCLUDE_SENSITIVE_DATA'",
+  "skyflow.utils.enums.ReturnEntitiesType.NONE": "attr = 'NONE'",
   "skyflow.utils.enums.UpsertType": "class (Enum)",
   "skyflow.utils.enums.UpsertType.REPLACE": "attr = 'REPLACE'",
   "skyflow.utils.enums.UpsertType.UPDATE": "attr = 'UPDATE'",

The common package CI runs tests with `python -m unittest` (no pytest
installed), so rewrite common/tests/vault/detect/test_detect.py as a
unittest.TestCase (self.assertRaises, tempfile instead of the pytest
tmp_path fixture). Runs green under both unittest and pytest.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@promptless

promptless Bot commented Oct 26, 2026

Copy link
Copy Markdown

Promptless documentation updates

saileshwar-skyflow and others added 9 commits November 3, 2026 14:17
…e and ReidentifySourceType

Mirror the Java Detect V2 contract change: the single DataSourceType enum is split
into DeidentifySourceType (deidentify_file data_source and the output_type of
DeidentifyFileResponse / GetRunResponse) and ReidentifySourceType (reidentify_file
data_source and ReidentifyFileResponse output_type).

Like Java, the two source enums are defined per SDK rather than in common:
  - skyvault DeidentifySourceType: BASE64, SKYFLOW_ID, PRESIGNED_URL
  - flowvault DeidentifySourceType: BASE64, PRESIGNED_URL (no skyflow id)
  - ReidentifySourceType: BASE64, PRESIGNED_URL in both (re-identification never
    accepts a skyflow id)

common stays SDK-agnostic: the controller/mappers resolve the response output_type
through the per-SDK VaultClient (get_deidentify_source_type / get_reidentify_source_type),
and the file-output writer compares the output type by value. Updates both SDK enum
re-exports, the reidentify_file sample, and the unit/re-export tests.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
"# DetectController — Detect V2" produced an awkward anchor
(#detectcontroller--detect-v2) and didn't match the cross-SDK convention; the
Go flowvault README uses "Detect". Renamed to "# Detect" (anchor #detect); the
section intro already states it is Detect V2 and how to get the controller.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* SK-3076 add v1-deprecation warning

* SK-3076 fix ci-check
The 865a4f5 regeneration renamed generated REST client methods but the
consuming code was not fully updated, breaking bearer-token auth (every
e2e failed with "Failed to generate bearer token") and the skyvault
data-plane:

- common/service_account/_utils.py: call get_bearer_token() (renamed from
  authentication_service_get_auth_token).
- common/utils/_skyflow_messages.py: resolve the host SDK version via an
  importlib.metadata fallback so messages/metrics report the real version
  instead of 0.0.0.
- skyvault/skyflow/service_account/__init__.py: re-export from
  common.service_account (skyvault's generated authentication client was
  removed by the regen), matching flowvault.
- skyvault/skyflow/vault/controller/_vault.py: rewire record/token/query
  calls to the new generated method names; move file upload to the files
  client (upload_file_v2).
- skyvault/skyflow/vault/client/client.py: add get_files_api().

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…entifySourceType split

The detect DataSourceType enum was split into per-SDK DeidentifySourceType
and ReidentifySourceType, but the committed griffe baselines were not
regenerated, so Contract Tests failed on public API drift. Regenerate both
skyvault and flowvault baselines to record the intended enum change.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…d common auth

Mirror the controller/auth migration in the unit tests so they exercise the
methods the code now calls:

- test__vault.py: rename the mocked generated methods to the new names
  (batch_operation/insert_records/update_record/delete_records/get_records/
  execute_query/detokenize/tokenize), point file-upload at the files client
  (get_files_api + upload_file_v2), and drop byot from the batch_operation
  expectation (batch_operation no longer takes it; BYOT rides on per-record
  tokens).
- service_account/test__utils.py and utils/test__utils.py: the public
  skyflow.service_account now routes through common, so patch
  common.service_account._utils.* and assert get_bearer_token on the mocked
  auth client instead of the removed authentication_service_get_auth_token.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Mirror skyflow-java's SK-3175 change. RedactionLevel was one common class
carrying all four wire fields for every vault type. Replace it with an
abstract RedactionRule base in common (exposing the four wire accessors)
and a per-SDK RedactionLevel:

- skyvault RedactionLevel carries entity_name + redaction_type
- flowvault RedactionLevel carries token_group_name + redaction_pattern

The reidentify mapper reads the wire fields through the rule's accessors,
so each vault type only sends the fields its API supports. Refreshed the
skyvault API contract baseline for the new class.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
common.vault.detect no longer exports a concrete RedactionLevel (it exports
the RedactionRule base), so the reidentify mapping test uses a small concrete
RedactionRule double instead of importing RedactionLevel.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants